/**
 * 
 * Opened Touchable RIA Framework - A Web RIA Javascript Framework
 * 
 * Copyright (c) 2012
 * Dual licensed under the MIT or GPL v2 licenses.
 * 
 * @author  CuTe_CuBe
 * @version $Id: adapter.js 6 2012-03-10 12:51:49Z cc.hgfeng@gmail.com $
 */

/**
 * OTR.Graph.Adapter
 * 提供绘图适配器统一接口
 * 
 * @class OTR.Graph
 * @constructor
 * @param object params
 * 参数列表
 * width:   绘图宽度
 * height:  绘图高度
 */
OTR.Graph.Adapter = function(params){
    this.init(params);
};

OTR.Graph.Adapter.prototype = {
    
    /**
     * 是否已渲染
     * 
     * @type boolean
     */
    _rendered: false,
    
    /**
     * 接口类型
     * 
     * @type string
     */
    _type: null,
    
    /**
     * 把图像画布添加到指定文职
     * 
     * @param HTMLDomElement parent
     * @return OTR.Graph.Adapter
     */
    renderTo: function(parent) {
        if (this._canvas) {
            parent.appendChild(this._canvas);
        }
        
        this._rendered = true;
        
        return this;
    },
    
    /**
     * 是否已被选入
     * 
     * @returns boolean
     */
    isRendered: function() {
        return this._rendered;
    },
    
    /**
     * 初始化绘图对象
     * 
     * @param object params
     */
    init: function(config) {},
    
    /**
     * 绘制指定图形方法
     * 
     * @param OTR.Graph.Shape
     * @return OTR.Graph.Adapter
     */
    drawShape: function(shape){
        if (!shape instanceof OTR.Graph.Shape) {
            return this;
        }
        
        var brush = new OTR.Graph[this._type][shape.getName()](this, shape);
        
        brush.draw();
        
        return this;
    },

    /**
     * 绘制文字
     * 
     * @param string text 
     * @param mixed  size
     * @param int    x
     * @param int    y
     * @param string font
     * @return OTR.Graph.Adapter
     */
    drawText: function(text, size, x, y, font) {},
    
    /**
     * 插入图片
     * 
     * @param string src
     * @param int   width
     * @param int   height
     * @param int   x
     * @param int   y
     * @return OTR.Graph.Adapter
     */
    drawImage: function(src, width, height, x, y) {},
    
    /**
     * 获取当前画板对象（绘图区域包裹对象）
     * 
     * @return mixed
     */
    getCanvas: function(){
        return this._canvas;
    },
    
    /**
     * 设置接口名称
     * 
     * @protected
     * @param string type
     */
    _setType: function(type) {
        this._type = type;
    }
};